import 'dart:ffi';

import 'package:flutter/cupertino.dart';
import 'package:oktoast/oktoast.dart';

import '../../common_ui/loading.dart';
import '../../repository/api.dart';
import '../../repository/datas/TangeEqData.dart';
import '../../repository/datas/TangeEqEent.dart';
import '../../repository/datas/TangeEqFilter.dart';
import '../../utils/LogUtils.dart';
import '../../utils/constants.dart';
import '../../utils/sp_utils.dart';
import '../personal/personal_vm.dart';

/// api方法类
class HomeViewModel with ChangeNotifier {
  PersonViewModel viewModel = PersonViewModel();

  // static Future <List<BannerItemData>?> getBanner () async {

  // 设备列表
  List<TangeEqData> tangeeqlist = [];

  // 设备总数
  int? total;

  // 页码
  int pageNum = 1;

  // 页数
  int pageSize = 10;

  // 开关
  bool swticheq = true;

  // 探鸽筛选条件 必须传递-设备id
  List<TangeEqFilter>? tangefilterList = [];

  // 事件数据
  List<TangeEqEent> tangeeventlist = [];

  // 设备总数
  int? Eventtotal;

  // 页数
  int limit = 10;

  // 页码
  int offset = 1;

  // 开关
  bool swtichEvent = true;

  // 探鸽设备列表
  Future getTANGEList() async {
    showToast("发送请求");
    swticheq = true;
    TangeEqListResult result =
        await Api.instance.gettangeeqList(pageNum: pageNum, pageSize: pageSize);
    tangeeqlist?.addAll(result.tangeeqlist ?? []);
    showToast("发送请求==》${result.total}");
    total = result.total;
    LogUtils.e(tangeeqlist);
    // 通知状态组件值变化了
    SpUtils.saveString(Constants.BUT_PROP_PRICE, "99999");

    if (tangeeqlist != null) {
      // 打印第一个元素的 device_id
      // LogUtils.e("第一个 device_id: ${tangeeqlist?[0]?.deviceId}");
      // 查询类型
      LogUtils.w(tangeeqlist.length);
      if (pageNum == 1 && tangeeqlist.length > 0) {
        LogUtils.w("执行筛选");
        getTANGEFilterList(tangeeqlist?[0]?.deviceId);
      }

      // 长度
      SpUtils.saveString(Constants.BUT_EQLIST_PRICE, "${tangeeqlist?.length}");
    } else {
      print("tangeeqlist 为空或没有值");
    }
    swticheq = false;
    notifyListeners();
  }

  Future initListData({ValueChanged<bool>? callback}) async {
    LogUtils.w("上拉加载");
    if (swticheq) {
      showToast("请求没有加载完");
      return;
    }
    LogUtils.w(total);
    LogUtils.w(tangeeqlist?.length);
    if ((tangeeqlist?.length ?? 0) >= total!) {
      showToast("数据加载完毕");
      callback?.call(true);
      return;
    }
    pageNum++;
    LogUtils.w("加载分页${pageNum}");
    getTANGEList();
    // 回调出去
    callback?.call(true);
  }

  // 设备筛选参数
  Future getTANGEFilterList(id) async {
    tangefilterList = await Api.instance.gettangeeqfilterList(eqid: id);
    // LogUtils.w(tangefilterList);
    SpUtils.saveString(Constants.BUT_FILTER_PRICE, "99999");
    // LogUtils.e(tangeeqlist);
    // 通知状态组件值变化了
    // LogUtils.e(tangefilterList);
    // if (tangefilterList != null) {
    //   for (var item in tangefilterList!) {
    //     LogUtils.d("device_id: ${item.name}, device_name: ${item.tag}");
    //   }
    // }
    notifyListeners();
  }

  // 查询事件
  Future<void> getEventList({
    required String tag,
    required String date,
    required String deviceid,
  }) async {
    LogUtils.e("数据 ${deviceid}");
    swtichEvent = true;
    // Loading.showLoading();

    try {
      TangeEventListResult result = await Api.instance.geteventList(
        offset: offset,
        limit: limit,
        tag: tag,
        date: date,
        deviceid: deviceid,
      );
      tangeeventlist?.addAll(result.tangeeventlist ?? []);
      Eventtotal = result.total ?? 0;
      showToast("事件查询-${result.tangeeventlist}-${result.total}");
    } catch (e) {
      // 捕获异常并处理
      LogUtils.e("获取事件列表时发生错误: $e");
      // 你可以在这里添加其他错误处理逻辑，比如显示错误提示等
    } finally {
      // 无论是否发生异常，都会执行的部分
      // Loading.dismissAll();
      swtichEvent = false;
      // showToast("查询成功${Eventtotal}");
      notifyListeners();
    }
  }

  // 加载事件
  Future initEventData(
      {required String tag,
      required String date,
      required String deviceid,
      ValueChanged<bool>? callback}) async {
    LogUtils.w("上拉加载");
    if (swtichEvent) {
      showToast("请求没有加载完");
      return;
    }
    LogUtils.w(Eventtotal);
    LogUtils.w(tangeeventlist?.length);
    if ((tangeeventlist?.length ?? 0) >= Eventtotal!) {
      showToast("数据加载完毕");
      callback?.call(true);
      return;
    }
    offset++;
    LogUtils.w("加载分页${offset}");
    getEventList(tag: tag, date: date, deviceid: deviceid);
    // 回调出去
    callback?.call(true);
  }
}
